<?php if ( ! defined('APPPATH')) exit('No direct script access allowed');
class Setting extends Bidiots_Admin{
    
    public function __construct(){
        parent::__construct();
        $this->template->add_css('public/admin/css/iframe_style.css');
        $this->load->helpers(array(
                                    0=>'form_helper',
                                    1=>'url_helper',
                                    2=>'common_helper'));
    }
    
    //Danh sách module
    public function webSetting($error_alert = ''){
        $data_list = array();
        //Lấy danh sách module
        $this->load->model('setting_model');
        $data_list['list'] = $this->setting_model->listModule();
        $data_list['error'] = $error_alert;
        $this->template->parse_view('iframe','admin/websetting',$data_list);
        $this->template->render();
    }
    
    //Thêm module
    public function addModule(){
        $error_alert = '';
        //Lấy dữ liệu module
        $mod_name           = getValue('mod_name','str','POST','');
        $mod_control        = getValue('mod_control','str','POST','');
        $mod_view           = getValue('mod_view','str','POST','');
        $mod_action_name    = getValue('mod_action_name','str','POST','');
        $mod_action_link    = getValue('mod_action_link','str','POST','');
        $mod_order          = getValue('mod_order','int','POST',0);
        //Kiểm tra xem controller có tồn tại không
        $file_controller = APPPATH.'controllers/admin/'.$mod_control.'.php';
        if(!file_exists($file_controller)){
            $error_alert .= 'Controller không tồn tại, vui lòng tạo controller trước khi thêm module!';
        }
        elseif($mod_name && $mod_control && $mod_view && $mod_action_name && $mod_action_link){
            $this->load->model('setting_model');
            $error_alert .= $this->setting_model->addModule($mod_name,$mod_control,$mod_view,$mod_action_name,$mod_action_link,$mod_order);    
        }
        else{
            $error_alert .= 'Các trường thông tin không được bỏ trống';
        }
        $this->webSetting($error_alert);
    }
    /****************************************************/
    
    
    
    /******************    SỬA      *********************/
    /******************   MODULE    *********************/
    
    
    //Sửa module
    public function editModule(){
        $error_alert = '';
        //Lấy dữ liệu module
        $ajax               = getValue('ajax','int','POST',0);
        $mod_id             = getValue('mod_id','int','POST',0);
        $mod_name           = getValue('mod_name','str','POST','');
        $mod_control        = getValue('mod_control','str','POST','');
        $mod_view           = getValue('mod_view','str','POST','');
        $mod_action_name    = getValue('mod_action_name','str','POST','');
        $mod_action_link    = getValue('mod_action_link','str','POST','');
        $mod_order          = getValue('mod_order','int','POST',0);
        if($mod_id && $mod_name && $mod_control && $mod_view && $mod_action_name && $mod_action_link){
            $this->load->model('setting_model');
            $result = $this->setting_model->editModule($mod_id,$mod_name,$mod_control,$mod_view,$mod_action_name,$mod_action_link,$mod_order);
            if($result){
                $error_alert .='Success';
            }
            else{
                $error_alert .= 'Error';
            }    
        }
        else{
            $error_alert .= 'Các trường thông tin không được bỏ trống';
        }
        if($ajax){
            echo $error_alert;
        }
    }
    /****************************************************/
    
    
    /******************    XÓA    ***********************/
    /*******************  MODULE    *********************/
    //Xóa module
    public function deleteModule(){
        $error_alert = '';
        $mod_id = getValue('mod_id','int','POST',0);
        //Xóa theo ajax
        $ajax = getValue('ajax','int','POST',0);
        if($mod_id){
            $this->load->model('setting_model');
            $error_alert .= $this->setting_model->deleteModule($mod_id);
        }
        else{
            $error_alert = 'Không có bản ghi nào được chọn';
        }
        if($ajax){
            echo $error_alert;
        }
        else
            $this->webSetting($error_alert);
    }
    /****************************************************/
    
    
    
    
    /**
     *      cài đặt tài khoản, thêm sửa xóa users
     * */
     
     function userSetting($error_alert = ''){
        $data_list = array();
        $this->load->model('setting_model');
        //Lấy danh sách user
        $data_list['list'] = $this->setting_model->listUsers();
        //Lấy danh sách module
        $data_list['modules'] = $this->setting_model->listModule();
        
        //Lấy mảng permission
        $data_list['permission'] = $this->listPermission($data_list['list'],$data_list['modules']);
        //Biến thông báo lỗi
        $data_list['error'] = $error_alert;
        //Đổ về view
        $this->template->parse_view('iframe','admin/usersetting',$data_list);
        $this->template->render();
     }
     
     
     
     /****************************************************/
     /**
      * ****** lẤY RA CÁC QUYỀN CỦA 1 USER Ở 1 MODULE
      * @param : id của user và id của module
      * @return : array('edit'=>?, 'delete'=>?, 'add'=>?)
      * 
      * ********************************************
      * */
     protected function roleManager($adu_id,$mod_id){
        //Nếu không phải admin thì return false luôn
        $checkAdmin = $this->checkAdmin;
        if(!$checkAdmin){
            return false;
        }
        $this->load->model('setting_model');
        return $this->setting_model->getPermission($adu_id,$mod_id);
     }
     
     //Lấy mảng permission
     protected function listPermission($array_user,$array_module){
        $permission = array();
        if(is_array($array_user)){
            foreach($array_user as $user){
                //Lấy ra id của user, với mỗi id thì dùng vòng lặp foreach mảng modules để lấy ra permission
                if(is_array($array_module)){
                    foreach($array_module as $mod){
                        $permission[$user['adu_name']][$mod['mod_id']] = $this->roleManager($user['adu_id'],$mod['mod_id']);
                    }
                }
            }
        }
        return $permission;
     }
        //Thêm mới user
     public function addUser(){
        $data = array();
        $data['error'] = array();
        $data['success'] = '';
        //Danh sách user
        $this->load->model('setting_model');
        $data['list'] = $this->setting_model->listUsers();
        $data['modules'] = $this->setting_model->listModule();
        //Mảng permission trả về view
        $data['permission'] = $this->listPermission($data['list'],$data['modules']);
        //Check quyền admin user của user hiện tại
        $checkAdmin = $this->checkAdmin;
        if(!$checkAdmin){
            $data['error'][] = 'Bạn không phải là admin, vì thế bạn không có quyền thêm user';
            $this->template->parse_view('iframe','admin/usersetting',$data);    
            $this->template->render();
            return false;
        }
        //Lấy dữ liệu user từ form
        $adu_name           = getValue('adu_name','str','POST','');
        $adu_fullname       = getValue('adu_fullname','str','POST','');
        $adu_pass           = getValue('adu_pass','str','POST','');
        $adu_repass         = getValue('adu_repass','str','POST','');
        $adu_address        = getValue('adu_address','str','POST','');
        $adu_mail           = getValue('adu_mail','str','POST','');
        $adu_birthday       = getValue('adu_birthday','str','POST','');
        $adu_phone          = getValue('adu_phone','str','POST','');
        $adu_yahoo          = getValue('adu_yahoo','str','POST','');
        $adu_skype          = getValue('adu_skype','str','POST','');
        $adu_active         = getValue('adu_active','str','POST','');
        $adu_role           = getValue('adu_role','str','POST','');
        
        //Biến kiểm tra lỗi dữ liệu
        $check_data = 1;
        if(!$adu_name){
            $data['error'][] = 'Tài khoản đăng nhập không được bỏ trống';
            $check_data = 0;
        }
        if(!$adu_pass){
            $data['error'][] = 'Password không được bỏ trống';
            $check_data = 0;
        }
        if($adu_pass && $adu_repass !== $adu_pass){
            $data['error'][] = 'Password nhập lại không chính xác';
            $check_data = 0;
        }
        if(!$adu_mail){
            $data['error'][] = 'Email không được bỏ trống';
            $check_data = 0;
        }
        //Nếu check_data = 0 => cho out luôn
        if(!$check_data){
            //Danh sách user
            $this->load->model('setting_model');
            $data['list'] = $this->setting_model->listUsers();
    
            $this->template->parse_view('iframe','admin/usersetting',$data);    
            $this->template->render();
            return false;
        }
        //Kiểm tra xem user đã tồn tại hay chưa
        $this->load->model('common_model');
        $result = $this->common_model->listing('admin_users','adu_id',NULL,'adu_name = "'.$adu_name.'"');
        //Nếu user đã tồn tại thì đưa ra thông báo lỗi
        if($result){
            $data['error'][] = 'User đã tồn tại, vui lòng nhập tên khác';
        }
        //Nếu chưa thì thêm user
        if(!$result){
            $this->load->model('setting_model');
            $adduser = $this->setting_model->addUser($adu_name,$adu_pass,$adu_fullname,
                                                    $adu_phone,$adu_address,$adu_mail,
                                                    $adu_yahoo,$adu_skype,$adu_birthday,
                                                    $adu_active,$adu_role);
            if($adduser){
                $data['success'] = 'Bạn đã thêm thành công';
            }
            else{
                $data['error'][] = 'Hệ thống đang tạm ngưng dịch vụ, xin hãy thử lại sau';
            }
        }
        //Danh sách user
        $this->load->model('setting_model');
        $data['list'] = $this->setting_model->listUsers();

        $this->template->parse_view('iframe','admin/usersetting',$data);    
        $this->template->render();
    }
    
    
    /*****************************************************/
        //Sửa user
    public function qEditUser(){
        $data = array();
        $data['error'] = '';
        $data['success'] = '';
        //check quyền admin
        //Check quyền admin user của user hiện tại
        $checkAdmin = $this->checkAdmin;
        
        if(!$checkAdmin){
            $data['error'] = 'Bạn không có quyền admin';
            echo json_encode($data);
            return false;
        }
        $ajax = getValue('ajax','int','POST',0);
        $action = getValue('action','str','POST','');
        $id = getValue('id','int','POST',0);
        if($ajax){
            switch($action){
                //Inactive user
            case 'ban':
                //Check nếu id là id của user hiện tại thì đưa ra thông báo lỗi
                if($id == $this->user['u_id']){
                    $data['error'] = 'Bạn không thể ban nick của chính mình';
                }
                else{
                    $this->load->model('setting_model');
                    $result = $this->setting_model->editUser($id,array('adu_active'=>0));
                    if($result)
                        $data['success'] = 'Success';
                    else
                        $data['error'] = 'Hệ thống đang tạm ngừng cung cấp dịch vụ, xin hãy thử lại sau';
                }
                break;
                
            //Delete user
            case 'delete':
                //Check nếu id là id của user hiện tại thì đưa ra thông báo lỗi
                if($id == $this->user['u_id'])
                    $data['error'] = 'Bạn không thể xóa nick của mình';
                else{
                    $this->load->model('setting_model');
                    $result = $this->setting_model->deleteUser($id);
                    if($result)
                        $data['success'] = 'Success';
                    else
                        $data['error'] = 'Hệ thống đang tạm ngừng cung cấp dịch vụ, xin hãy thử lại sau';
                }
                break;
            case 'active':
                //Check nếu id là id của user hiện tại thì đưa ra thông báo lỗi
                if($id == $this->user['u_id'])
                    $data['error'] = 'Bạn không thể active nick của mình';
                else{
                    $this->load->model('setting_model');
                    $result = $this->setting_model->editUser($id,array('adu_active'=>1));
                    if($result)
                        $data['success'] = 'Success';
                    else
                        $data['error'] = 'Hệ thống đang tạm ngừng cung cấp dịch vụ, xin hãy thử lại sau';
                }
                break;    
            case 'makeAdmin':
                //Check nếu id là id của user hiện tại thì đưa ra thông báo lỗi
                if($id == $this->user['u_id'])
                    $data['error'] = 'Bạn không có quyền';
                else{
                    $this->load->model('setting_model');
                    $result = $this->setting_model->editUser($id,array('adu_role'=>1));
                    if($result)
                        $data['success'] = 'Success';
                    else
                        $data['error'] = 'Hệ thống đang tạm ngừng cung cấp dịch vụ, xin hãy thử lại sau';
                }
                break;
            case 'cancelAdmin':
                //Check nếu id là id của user hiện tại thì đưa ra thông báo lỗi
                if($id == $this->user['u_id'])
                    $data['error'] = 'Bạn không có quyền';
                else{
                    $this->load->model('setting_model');
                    $result = $this->setting_model->editUser($id,array('adu_role'=>0));
                    if($result)
                        $data['success'] = 'Success';
                    else
                        $data['error'] = 'Hệ thống đang tạm ngừng cung cấp dịch vụ, xin hãy thử lại sau';
                }
                break;   
            }
            echo json_encode($data);
        }
        
    }
    
    /**********************************
     * *****        Phân quyền user ***
     * ********************************
     * @return json string
     * */
     public function  updatePermission(){
        $data['error'] = '';
        $data['success'] = '';
        //Kiểm tra quyền admin
        if(!$this->checkAdmin){
            $data['error'] = 'Bạn không có quyền admin, vui lòng liên hệ với admin';
            echo json_encode($data);
            return false;
        }
        //Mảng data nhận được 
        $array_data = getValue('data','arr','POST',NULL);
        if($array_data){
            //Xóa hết các bản ghi của user đó
            //Lấy user_id
            foreach($array_data as $element){
                $eles = explode('u',$element['key']);
                $adu_id = $eles[1];
            }
            $this->load->model('setting_model');
            //Xóa bản ghi trong admin_users_right
            $this->setting_model->removePermission($adu_id);
            //Mỗi phần tử của array_data tương ứng với 1 module
            foreach($array_data as $element){
                //Phân tích key để lấy ra id của module và user
                //chuỗi có dạng (id)u(id)
                $eles = explode('u',$element['key']);
                $mod_id = $eles[0];
                $permis = $element['value'];
                //--------------
                //update dữ liệu
                $result = $this->setting_model->setPermission($adu_id,$mod_id,$permis['add'],$permis['edit'],$permis['delete']);
            }
            if($result){
                $data['error'] = '';
                $data['success'] = 'Success';
            }
            else{
                $data['error'] = 'Hệ thống đang bảo trì, vui lòng thử lại sau';
                $data['success'] = '';
            }
            echo json_encode($data);
        }
     }
}
?>